The invention relates to general purpose computer applications which share data in a single or multi-system configuration (a SYSPLEX). More specifically, it relates to the managing of shared lists of data in a separate facility which is coupled to each of the computer systems, and where the separate facility detects the changes of a list to an empty or a not-empty state, and notifies interested applications on the computer systems in the coupled configuration about the state-transitions.
Queueing or message passing as a general concept is basic to many programming protocols. A list of objects is a convenient means of representing work requests between a client and a server. The server is responsible to remove a work object from the list, service the request and send the response back to the client indicating the service has been completed. The response may be presented to the client by placing a response object on a list processed by the client. In such a client-server system, the server accepts and processes requests until all requests have been processed and the list of service requests is exhausted. Typically, when the list of requests is exhausted, the server enters a wait state or performs lower priority work until notification is received indicating additional requests have been placed on the list for service.
In multiprocessing and coupled systems environments, the list, or queue, of work objects, and response objects, are processed by a multiplicity of processes (programs) which may operate in one or more Central Processor Complexes (CPCs). The lists must be accessible by each of the processes, resulting in problems of coordination among the processes.
These problems grow in environments where two or more CPCs are each remotely coupled to a shared external memory containing queues of work and response objects. The delay and overhead involved in accessing the lists put a high premium on minimizing accesses to the external memory, as well as minimizing interprocessor communication required for coordination.
Exemplary of these problems is the problem of reducing or eliminating remote requests by a process directed toward a list which is empty. Processes which rely on "polling" techniques--developed to accommodate local queue environments where the costs of periodic polling are low--will suffer unacceptable performance penalties if polling must be done to an external device, and a substantial likelihood exists that a queue may be empty.
In order to reduce this overhead, techniques have been developed by which a remote client or server is notified when a queue becomes empty (so that polling can be suspended), or transitions from an empty to non-empty state (so that polling can be resumed). Typically, such notification is done in static, or tightly controlled environments, where the association between the queue and the process interacting with the queue is known, so that determination of which processor to signal is simple. Additionally, such systems must contend with the overhead within the systems containing client or server processes of being interrupted when such notifications are received, and handling the notification in an appropriately serialized manner if multiple processes are to execute in parallel. Again, such difficulties may severely restrict the operating environments which can accommodate such notification schemes.
It is an object of the present invention to provide an improved mechanism, with low overhead and data integrity, for providing notification of state transition (empty to non-empty, or non-empty to empty) of list structures on a shared storage device, to processes executing on remote processors, and accessing the list structures.
It is a further object of this invention to provide a mechanism whereby a process executing on a general-purpose system may initiate and terminate notification of state transitions involving a particular list on a shared external storage device, with minimal disruption of other work executing on the same system.
It is another object of this invention to minimize communication required between systems executing in a Systems Complex (Sysplex) to effect the sharing of a remote list of work objects among client/server processes executing on the systems.